package com.itheima.info.manger.service;
import com.itheima.info.manger.dao.StudentDao;
import com.itheima.info.manger.domain.Student;
/*
    业务员类
        1. 这里的所有方法【功能】都是给客服用
        2. 如果某些业务涉及到要对数据仓库的数据进行访问的话,那么需要在业务员类中操作库管对象
        3. 该类的核心作用是用于处理业务逻辑,例如: 判断录入的id是否存在
 */
public class StudentService {
    private StudentDao studentDao = new StudentDao();



    //业务员中的增加学生方法
    public boolean addStudent(Student stu) {
        //1.创建StudentDao(库管)对象
        StudentDao studentDao = new StudentDao();
        //2.将封装好的学生对象,交给库管,进行添加操作,库管添加后
        //返回结果true or false;
        //将结果告知客服
        return studentDao.addStudent(stu);
    }



    //业务员中的判断学号是否存在功能
    public boolean isExists(String id) {
        //1.拿到系统中已有的所有学号信息
            //1.1指挥库管将系统中所有学生信息查找出来
         /*
            1. allStudents = {null,null,null,null,null}
            2. allStudents = {stu,stu,null,null,null}
            3. allStudents = {stu,stu,stu,stu,stu}
         */
        StudentDao studentDao = new StudentDao();
        Student[] allStudent =studentDao.findAllStudents();
        //2.拿要校验的id去与已有的学号中遍历寻找
            //2.1先假设要查找的id不存在
        boolean flag=false;
        
            //2.2遍历所有学生信息
        for (int i = 0; i < allStudent.length; i++) {
            //2.3拿到每一个学生对象的学号
            Student stu=allStudent[i];
            //2.4当前索引位置的学生不为null,并且该学生的学号和要查找的学号相同
            if(stu!=null&&stu.getSid().equals(id)){
                flag=true;
            }
        }
        return flag;
    }



    //业务员中的找到所有学生的方法
    public Student[] findAllStudent() {
        //1.指挥库管拿到所有学生信息
        Student[] allStudents=studentDao.findAllStudents();

        //2对库管返回的学生数组进行数据分析处理;
        //2.1如果库管返回的数组中全是null,当前方法直接返回null
        //2.2如果库管给我的数组中有一个学生信息,当前方法返回整个数组

        //先假设查到的数组allStudents里面全是null---假设一个学生都没有
        boolean flag = false;

        //遍历allstudents
        for (int i = 0; i < allStudents.length; i++) {
            //拿到每一个索引位置的元素进行判断
            if(allStudents[i]!=null){
                //只要有一个不为null,说明有学生,修改标记位为true
                flag=true;
                break;
            }
        }
        //跟据flag的值来决定本次方法的返回值
        if(flag){
            //有学生,返回allStudents
            return allStudents;
        }else{
            return null;
        }
    }


    //业务员中的删除学生方法
    public void deleteStudentById(String delId) {
        //指挥库管进行删除学生功能
        studentDao.deleteStudentById(delId);
    }


    //业务员中修改学生的方法
    public void updateStudentById(String updateId, Student newStudent) {
        studentDao.updateStudentById(updateId,newStudent);
    }
}
